#include <iostream>
#include <memory>
using namespace std;

class A
{
    public:
        A(){}
        A(int set_data):data(set_data)
        {
            
        }
        int data;
        void info()
        {
            cout<<"data的值为:"<<data<<endl;
        }

        ~A()
        {
            cout<<"A类的析构函数被调用"<<endl;
        }
};

int main(int argc, char const *argv[])
{
    shared_ptr<A> p1(new A(100));   // 用shared_ptr管理并初始化A类的对象
    shared_ptr<A> p2 = p1;  //调用 智能指针类对象p2的拷贝构造
    p1->info();
    // cout<<"p1的引用计数为:"<<p1.use_count()<<endl;
    
    p2->info();
    // cout<<"p2的引用计数为:"<<p2.use_count()<<endl;

    shared_ptr<A> p3;
    p3->info(); // 调用空智能指针的info()函数，会报错

    return 0;
}